// Copyright  2012 Petr TALLA. [petr.talla@gmail.com]
// This file is free software; you can redistribute it and/or modify it
// under the terms of the GNU Lesser General Public License
// as published by the Free Software Foundation; either
// version 2 of the License, or (at your option) any later version.
//
// This file is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY;  without even the implied warranty
// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
// See the GNU Lesser General Public License for more details.
// [http://www.gnu.org/copyleft/lesser.html]
//=============================================================================
#include "./TcCmdProcessExe.h"
#include "./TcArgCol.h"
#include "./TcArgVal.h"
#include "./TcCmd.h"
#include "./TcCmdEngine.h"
#include <map>

using namespace std;

//=============================================================================
TcCmdProcessExe::TcCmdProcessExe(TcCmdEngine* engine) :
    TcCmdProcess(engine)
{
}

//=============================================================================
int TcCmdProcessExe::execute(TcArgCol& args, bool /*isFrontController*/)
{   if ( args.count() == 0 ) return args.appendError("enter at least first argument which is command name");

    TcArgVal* cmdName = args.at(0)->getAsVal();
    if ( cmdName == NULL )
    {   return args.appendError("command name (the first argument) must be of category TcArgVal");
    }

    TcCmd* cmd = engine_->find(args);
    if ( cmd == NULL ) return args.appendError("comand name not found");
    int result = cmd->cmd()(this->engine_, args);

    return result;
}

//=============================================================================
